package cn.edu.fzu.homemaking.mapper;

import cn.edu.fzu.homemaking.domain.entity.DateCount;
import cn.edu.fzu.homemaking.domain.entity.Order;
import cn.edu.fzu.homemaking.domain.enums.CommentStatusEnum;
import cn.edu.fzu.homemaking.domain.enums.OrderStatusEnum;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.util.List;

public interface OrderMapper {

    /**
     * 生成订单
     * @param orderId
     * @param companyId
     * @param userId
     * @param demandId
     * @param serverId
     * @param description
     * @param customerName
     * @param address
     * @param phone
     * @param email
     * @param startTime
     * @param price
     * @param qty
     * @param status
     * @param commentStatus
     */
    void insert(@Param("orderId") String orderId, @Param("companyId") Long companyId, @Param("userId") Long userId,
                @Param("demandId") Long demandId, @Param("serverId") Long serverId, @Param("description") String description,
                @Param("customerName") String customerName, @Param("address") String address, @Param("phone") String phone,
                @Param("email") String email, @Param("startTime") String startTime, @Param("price") BigDecimal price,
                @Param("qty") Integer qty, @Param("status") OrderStatusEnum status,
                @Param("commentStatus") CommentStatusEnum commentStatus);

    /**
     * 获取订单列表
     * @param companyId
     * @param userId
     * @param demandId
     * @param serverId
     * @param startTime
     * @param endTime
     * @param status
     * @param commentStatus
     * @return
     */
    List<Order> list(@Param("companyId") Long companyId, @Param("userId") Long userId, @Param("demandId") Long demandId,
                     @Param("serverId") Long serverId, @Param("startTime") String startTime,
                     @Param("endTime") String endTime, @Param("status") OrderStatusEnum status,
                     @Param("commentStatus") CommentStatusEnum commentStatus);

    /**
     * 获取用户待支付的订单列表
     * @param statusList
     * @param usrId
     * @return
     */
    List<Order> listUnPayByUserId(@Param("statusList") List<OrderStatusEnum> statusList,@Param("userId") Long usrId);

    /**
     * 更新订单状态
     * @param orderId
     * @param status
     */
    void updateStatus(@Param("orderId") String orderId, @Param("status") OrderStatusEnum status);

    /**
     * 更新订单评价状态
     * @param orderId
     * @param commentStatus
     */
    void updateCommentStatus(@Param("orderId") String orderId, @Param("commentStatus") CommentStatusEnum commentStatus);
    /**
     * 根据订单id获取订单信息
     * @param orderId
     * @return
     */
    Order selectByOrderId(@Param("orderId") String orderId);

    /**
     * 获取多个订单信息
     * @param orderIds
     * @param startTime
     * @param endTime
     * @param status
     * @return
     */
    List<Order> listByOrderIds(@Param("orderIds") List<String> orderIds, @Param("startTime") String startTime,
                                 @Param("endTime") String endTime, @Param("status") OrderStatusEnum status);

    /**
     * 订单统计
     * @param startTime
     * @param endTime
     * @param isDemand
     * @param status
     * @param companyId
     * @return
     */
    Long count(@Param("startTime") String startTime, @Param("endTime") String endTime,
               @Param("isDemand") Boolean isDemand, @Param("status") OrderStatusEnum status,
               @Param("companyId") Long companyId);

    /**
     * 按月统计
     * @param startTime
     * @param endTime
     * @param companyId
     * @return
     */
    List<DateCount> countByMonth(@Param("startTime") String startTime, @Param("endTime") String endTime,
                                 @Param("companyId") Long companyId);

    /**
     * 按天统计
     * @param startTime
     * @param endTime
     * @param companyId
     * @return
     */
    List<DateCount> countByDay(@Param("startTime") String startTime, @Param("endTime") String endTime,
                                 @Param("companyId") Long companyId);

}
